home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 98 / Skunkware 98.iso / src / net / bind-contrib.tar.gz / bind-contrib.tar / contrib / misc / settransfer-gaine.shar / ns_maint.c-DIFF < prev    next >
Encoding:
Text File  |  1996-10-25  |  3.4 KB  |  113 lines

  1. *** ns_maint.c-    Fri Dec 22 05:20:36 1995
  2. --- ns_maint.c    Fri Mar 22 14:13:55 1996
  3. ***************
  4. *** 90,95 ****
  5. --- 90,99 ----
  6.   
  7.   #define    qserial_qfull()    (qserials_running == MAXQSERIAL)
  8.   
  9. + #if defined(SETTRANSFER) && !defined(ROUND_ROBIN)
  10. + extern char * getXfer();
  11. + #endif /* SETTRANSFER && !ROUND_ROBIN */
  12.   #ifdef CLEANCACHE
  13.   static time_t cache_time;
  14.   #endif
  15. ***************
  16. *** 281,289 ****
  17. --- 285,322 ----
  18.       struct zoneinfo *zp;
  19.   {
  20.       struct qinfo *qp;
  21. + #if defined(SETTRANSFER) && !defined(ROUND_ROBIN)
  22. +     int mcntr; /* looping variable */
  23. + #endif /* SETTRANSFER && !ROUND_ROBIN */
  24.   
  25.       dprintf(1, (ddt, "qserial_query(%s)\n", zp->z_origin));
  26.   
  27. + #if defined(SETTRANSFER) && !defined(ROUND_ROBIN)
  28. +        /* if zp->z_xaddr or zp->z_addr has our own address in it,
  29. +     * then we may be dealing with a ``dynamic'' zone - i.e.
  30. +     * calculating this information via an external program
  31. +     * (e.g. for load balancing benefits).  The serial number
  32. +     * won't change until _after_ we call the zone transfer
  33. +     * program.
  34. +     */
  35. +     dprintf(1, (ddt, "qserial: checking myself\n"));
  36. +     if (zp->z_xaddr.s_addr == netloop.my_addr.s_addr) {
  37. +         dprintf(1, (ddt, "qserial_query(%s) found me.\n",zp->z_origin));
  38. +         addxfer(zp);
  39. +         return;
  40. +     }
  41. +     for (mcntr=0; mcntr < NSMAX; mcntr++) {
  42. +         dprintf(1, (ddt, "qserial_query - checking [%s]\n",
  43. +             inet_ntoa(zp->z_addr[mcntr])));
  44. +         if (zp->z_addr[mcntr].s_addr == netloop.addr) {
  45. +         dprintf(1, (ddt, "qserial_query(%s) found me.\n",zp->z_origin));
  46. +         addxfer(zp);
  47. +         return;
  48. +         }
  49. +     }
  50. + #endif /* SETTRANSFER && !ROUND_ROBIN */
  51.       if (qserial_qfull())
  52.           return;
  53.   
  54. ***************
  55. *** 465,471 ****
  56.   
  57.               a = zp->z_addr[cnt];
  58.               if (aIsUs(a) &&
  59. !                 !haveComplained(zp->z_origin, (char*)startxfer)) {
  60.                   syslog(LOG_NOTICE,
  61.                      "attempted to fetch zone %s from self (%s)",
  62.                          zp->z_origin, inet_ntoa(a));
  63. --- 498,510 ----
  64.   
  65.               a = zp->z_addr[cnt];
  66.               if (aIsUs(a) &&
  67. !                 !haveComplained(zp->z_origin,
  68. !                                               (char*)startxfer)
  69. ! #if defined(SETTRANSFER) && !defined(ROUND_ROBIN)
  70. !                            && (!getXfer(zp->z_origin))
  71. ! #endif /* SETTRANSFER && !ROUND_ROBIN */
  72. !                            ) {
  73.                   syslog(LOG_NOTICE,
  74.                      "attempted to fetch zone %s from self (%s)",
  75.                          zp->z_origin, inet_ntoa(a));
  76. ***************
  77. *** 504,513 ****
  78.   
  79.       if (pid == 0) {
  80.           /* Child. */
  81. !         execv(_PATH_XFER, argv);
  82. !         syslog(LOG_ERR, "can't exec %s: %m", _PATH_XFER);
  83. !         _exit(XFER_FAIL);    /* Avoid duplicate buffer flushes. */
  84. !     }
  85.       /* Parent. */
  86.       xferstatus[i].xfer_pid = pid;  /* XXX - small race condition here if we
  87.                       * can't hold signals */
  88. --- 543,562 ----
  89.   
  90.       if (pid == 0) {
  91.           /* Child. */
  92. ! #if defined(SETTRANSFER) && !defined(ROUND_ROBIN)
  93. !                char * pathXfer;
  94. !                pathXfer = getXfer(zp->z_origin);
  95. !                if (pathXfer != (char *)NULL)
  96. !                  execv(pathXfer, argv);
  97. !                else
  98. !                  execv(_PATH_XFER, argv);
  99. ! #else /* SETTRANSFER && !ROUND_ROBIN */
  100. !                execv(_PATH_XFER, argv);
  101. ! #endif /* SETTRANSFER && !ROUND_ROBIN */
  102. !                 syslog(LOG_ERR, "can't exec %s: %m", _PATH_XFER);
  103. !                 _exit(XFER_FAIL);       /* avoid duplicate buffer flushes */
  104. !         }
  105.       /* Parent. */
  106.       xferstatus[i].xfer_pid = pid;  /* XXX - small race condition here if we
  107.                       * can't hold signals */
  108.